import plugin from '../../lib/plugins/plugin.js'
import _ from "lodash"

// 用于记录用户最后一次使用功能的时间
const userCooldown = new Map();

// 用于记录用户头衔设置时间
const titleExpiryMap = new Map();

// 用于记录用户每日使用次数
const userDailyUsage = new Map();

export class example extends plugin {
    constructor() {
        super({
            name: "抽头衔",
            dsc: "如名字所说",
            event: "message.group",
            priority: 1,
            rule: [
                {
                    reg: '^#?抽头衔$',
                    fnc: 'ctx'
                },
				{
					reg: '^#?恢复默认头衔$',
					fnc: 'mr'
				}
            ]
        });

        // 初始化头衔列表
        this.Title = [
            "花菜の⭐😡","凑蓝桶","湊蓝瞳","臭男同","抽南通","🥦の星怒","欧皇专属头衔","0","小南梁","笑楠良","魈兰粮","挖掘机","华彩嘚√","想要索尼机子","卧思可哀南梁","入机"//自己改
        ];

        // 每天凌晨重置使用次数
        this.resetDailyUsage();
    }

    async ctx(e) {
        // 检查机器人是否是群主
        if (!e.group.is_owner) return e.reply("伦家不是群主啦！");

        // 检查每日使用次数
        const maxDailyUsage = 3; // 每天最多使用 3 次
        const today = new Date().toDateString(); // 获取当前日期
        const userUsage = userDailyUsage.get(e.user_id) || { date: today, count: 0 };

        // 如果日期变化，重置计数
        if (userUsage.date !== today) {
            userUsage.date = today;
            userUsage.count = 0;
        }

        // 检查是否超过每日限制
        if (userUsage.count >= maxDailyUsage && !e.isMaster) {
            return e.reply("❎ 今日使用次数已达上限，大侠请明天再来", true);
        }

        // 检查冷却时间
        const cooldownTime = 60 * 60 * 1000; // 1 小时冷却时间
        const lastUseTime = userCooldown.get(e.user_id) || 0;
        const now = Date.now();

        if (now - lastUseTime < cooldownTime && !e.isMaster) {
            const remainingTime = Math.ceil((cooldownTime - (now - lastUseTime)) / 1000 / 60); // 转换为分钟
            return e.reply(`❎ 操作过于频繁，请 ${remainingTime} 分钟后再试！`, true);
        }

        // 更新用户最后一次使用时间和每日使用次数
        userCooldown.set(e.user_id, now);
        userUsage.count++;
        userDailyUsage.set(e.user_id, userUsage);

        // 获取用户当前头衔
        let memberInfo;
        try {
            memberInfo = await Bot.getGroupMemberInfo(e.group_id, e.user_id);
        } catch (err) {
            logger.error("获取群成员信息失败：", err);
            return e.reply("❎ 获取群成员信息失败，请稍后重试。", true);
        }

        if (!memberInfo) {
            return e.reply("❎ 无法获取群成员信息，请检查权限或重试。", true);
        }

        const currentTitle = memberInfo.title;

        // 检查当前头衔是否在 Title 范围内
        if (this.Title.includes(currentTitle) || currentTitle === "") {

        // 随机选择一个新头衔
        let T = this.Title[Math.floor(Math.random() * this.Title.length)];

        // 设置用户头衔
        let res = await e.group.setTitle(e.user_id, T);
        if (!res) return e.reply("❎ 未知错误", true);

        // 如果抽到“欧皇专属头衔”，设置过期时间
        if (T === "欧皇专属头衔") {
            const expiryTime = 24 * 60 * 60 * 1000; // 24 小时
            titleExpiryMap.set(e.user_id, now + expiryTime);

            // 启动定时任务，检查头衔是否过期
			let time = 5 * 60
        let rand_num = Math.random()
        if (rand_num < 0.2)
            time = rand(60, 300)
        else if (rand_num > 0.95)
            time = rand(10 * 24 * 60 * 60, 30 * 24 * 60 * 60)
        else if (rand_num > 0.85)
            time = rand(5 * 24 * 60 * 60, 10 * 24 * 60 * 60)
        else if (rand_num > 0.7)
            time = rand(1 * 24 * 60 * 60, 5 * 24 * 60 * 60)
        else
            time = rand(300, 1 * 24 * 60 * 60)

        e.reply(`本次欧皇时长：${formatTime(time)}`, true)

        redis.set(`Yz:ouhuang:${e.group_id}:${e.user_id}`, JSON.stringify({ qq: e.user_id, gid: e.group_id, time: time }), { EX: time })

        return true
		schedule.scheduleJob("0 * * * * ? ", async () => {
    let li = await redis.keys(`Yz:ouhuang:*`)
    console.log(li)
    for (let val of li) {
        let ttl = await redis.ttl(val)
        if (ttl < 70) {
            let data = await redis.get(val)
            data = JSON.parse(data)
            // console.log(data)
            let g = Bot.pickGroup(Number(data.gid))
            setTimeout(() => {
                g.sendMsg([segment.at(data.qq * 1), `本次欧皇时长：${formatTime(data.time)}，
				\n众所周知欧皇寿命极短
				\n——你的「欧皇专属头衔」已过期，已恢复为默认头衔。`])
                g.setTitle(data.qq, "")
            }, ttl * 1000);
            redis.del(val)
            }     
            }
            })
        }

        // 回复用户
        e.reply(`✅ 恭喜你获得了新的头衔「${T}」并已更换`, true);
        return true;
        }else{
			e.reply("你已拥有某菜亲自赋予的抽不到的专属头衔，请联系某菜申请修改", true);
			return true
		}
    }

    // 每天凌晨重置使用次数
    resetDailyUsage() {
        const now = new Date();
        const nextMidnight = new Date(now);
        nextMidnight.setHours(24, 0, 0, 0); // 设置到第二天凌晨
        const timeUntilMidnight = nextMidnight - now;

        setTimeout(() => {
            userDailyUsage.clear(); // 清空每日使用次数
            this.resetDailyUsage(); // 递归调用，确保每天重置
        }, timeUntilMidnight);
    };
	async mr(e) {
		if (!e.isMaster) return reply(`只有主人可以恢复默认头衔！`);
			e.group.setTitle(e.user_id,"")
			e.reply(`头衔已恢复默认`,true)
		return true
	}
}
function rand(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}
function formatTime(t) {
    let d = parseInt(t / 60 / 60 / 24)
    let h = parseInt(t / 60 / 60 % 24)
    let m = parseInt(t / 60 % 60)
    let s = parseInt(t % 60)
    let str = `${m}分${s}秒`
    if (d || h) {
        str = `${h}小时` + str
    }
    if (d) {
        str = `${d}天` + str
    }
    return str
}